function [ktilde, ok, report] = synth_k_batch(tau, lambda_n, gamma, out_json, lambdas_all)
    % 计算 ktilde（离散、Ts=1） + 校验
    if nargin >= 5
        [~, ktilde, ~, ok, report] = synth_k_given_gamma(tau, lambda_n, gamma, lambdas_all);
    else
        [~, ktilde, ~, ok, report] = synth_k_given_gamma(tau, lambda_n, gamma, []);
    end

    % 导出传递函数系数（v 向量）
    ktf = tf(ktilde);         % 保证是 TF 形式
    [num, den, ~] = tfdata(ktf, 'v');

    % === 写 JSON（含可行性与分模态范数） ===
    fid = fopen(out_json, 'w');
    if fid < 0
        error('Cannot open output file: %s', out_json);
    end

    fprintf(fid, '{ "gamma": %.17g, "ok": %s, ', gamma, logical_to_json(ok));
    fprintf(fid, '"num":['); print_array_json(fid, num); fprintf(fid, '], ');
    fprintf(fid, '"den":['); print_array_json(fid, den); fprintf(fid, ']');

    if ~isempty(report)
        % 把 NaN 打印成 JSON 的 null
        fprintf(fid, ', "Hinf_each_mode":['); print_array_json(fid, report.Hinf_each_mode); fprintf(fid, ']');
        fprintf(fid, ', "lambdas":[');        print_array_json(fid, report.lambdas);        fprintf(fid, ']');
        fprintf(fid, ', "skipped_tol": %.17g', report.skipped_tol);
    end

    fprintf(fid, ' }\n');
    fclose(fid);
end

% ===== 工具：把逻辑值写成 JSON true/false =====
function s = logical_to_json(x)
    if x, s = 'true'; else, s = 'false'; end
end

% ===== 工具：把数值向量写成 JSON 数组（NaN -> null）=====
function print_array_json(fid, arr)
    for i = 1:numel(arr)
        v = arr(i);
        if isnan(v)
            fprintf(fid, 'null');
        else
            fprintf(fid, '%.17g', v);
        end
        if i < numel(arr), fprintf(fid, ','); end
    end
end
